package com.itheima.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Slf4j
//@Component //把该类交给spring创建对象,存到IOC容器中
//@Aspect  // 表示该类是一个切面类
public class TimeAspect {
        /**
         * @Around("")：写在方法上，表示该方法是一个通知方法，在方法内定义通知（要增强的逻辑代码）内容
         * execution(* com.itheima.service.impl.DeptServiceImpl.*(..)) :切点表达式，找出哪些类的哪些方法要增强，找切点。
         *  * ：任意一个返回值类型、任意一个包名、类名、方法名、任意一个参数类型
         *  .. ：表示任意多个任意类型的参数
         *
         * @param pjp
         * @return
         */

        @Around("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
public Object recordTime(ProceedingJoinPoint pjp) throws Throwable{

    // 1.获取开始时间
        long start = System.currentTimeMillis();

        // 2.执行目标对象方法
        Object result = pjp.proceed();

        // 3.获取结束时间
        long end = System.currentTimeMillis();
    // 4.计算耗时并打印结果
        log.info("共耗时:{}毫秒",end-start);
        return result;

}



}
